AI学習プラットフォーム「Universe」を試してみる
先月、OpenAIによるAI(人工知能)学習プラットフォーム「Universe」がオープンソース化されたと発表されました。
Universeとは、
OpenAIの開発したAI学習プラットフォームのUniverseは、既存のライブラリであるTensorFlowやTheanoをそのまま使えるプラットフォームです。 AIに学習を施すにはさまざまなタスクを経験させる必要がありますが、UniverseはAIエージェントに「人間と同じようにコンピューターを使ってさまざまなタスクを実行させる」というプラットフォームになっています。 AIエージェントに画面上に表示される映像を認識させ、バーチャル上のキーボードとマウスを使わせることで、人間がコンピューターを使うようにさまざまなタスクを行わせるわけです。
引用元:イーロン・マスクの人工知能研究機関OpenAIがAI学習プラットフォーム「Universe」をリリース | Gigazine
とのことです。ライセンスは確認したところMITのようです。
Github
https://github.com/openai/universe
公式サイト
今回は個人的に詰まった点も含めてUniverseを動かしたところまで記載したいと思います。
検証環境
Universeが動作するサポート対象はPython 2.7or3.5が動くLinuxまたはOSXと記載がありました。今回は以下のOSで試しています。
- mac OSX 10.11.6
準備
Pythonの環境構築
現在、利用しているPCでPythonを扱ったことが無かったので、まず最初にPythonの環境を構築しました。
以下のサイトを参考に、
MacでPython3系ベースの機械学習環境設定(Python2系との共存) | Qiita
Homebrewからpython3とpyenvをインストールしました。
> brew install python3 > brew install pyenv
そして、pyenvでconda環境であるminicondaをインストールしました。
> pyenv install -l > pyenv install miniconda3-3.19.0
※ UniverseのReadmeに「まず最初にconda環境を設定することをお勧めします」と記載があります。
pyenvでminicondaを選ぶようにしました。
# 使用するPythonの設定 > pyenv global miniconda3-3.19.0 # 現在のPythonのバージョン確認 > pyenv version miniconda3-3.19.0 > conda update conda
また、Pythonのバージョンがlocalのバージョンが優先されていたので切替ました。
> export PYENV_ROOT="${HOME}/.pyenv" > export PATH=${PYENV_ROOT}/bin:$PATH > eval "$(pyenv init -)"
> source .bash_profile
[参考] 環境変数の設定| MacでPython使う時の最低限のメモ | Qiita
Universeのインストール
Pythonの環境が出来たので次はUniverseのReadmeに従って導入を進めます。記述の通りに以下のコマンドを実行しました。
> git clone https://github.com/openai/universe.git > cd universe > pip install -e .
しかし、pip install -e .で以下のWarningが出てしまいました。(ログの最後を抜粋しています)
You are using pip version 8.1.2, however version 9.0.1 is available
You should consider upgrading via the 'pip install --upgrade pip' command.
Readmeにもある下記をインストールして、
> pip install numpy incremental > brew install golang libjpeg-turbo
さらにログに記載されていた通りにpipをアップデートしました。
> brew install python > pip install --upgrade setuptools
再度、
> pip install -e .
を実行したところSuccessfully installed universeとなり成功になりました。
Dockerのインストール
Dockerアプリをダウンロードして、インストールしただけで特に問題になる箇所はありませんでした。 https://docs.docker.com/docker-for-mac/
インストール後、docker psコマンドを実行した際に、
> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
となっていればOKみたいです。
実行
Readmeのサンプル
Run your first agentに書いてるサンプルコードをまるっとコピーしてsample1.pyというファイル名で保存しました。
import gym import universe # register the universe environments env = gym.make('flashgames.DuskDrive-v0') env.configure(remotes=1) # automatically creates a local docker container observation_n = env.reset() while True: action_n = [[('KeyEvent', 'ArrowUp', True)] for ob in observation_n] # your agent here observation_n, reward_n, done_n, info = env.step(action_n) env.render()
上記ファイルを
> python sample1.py
で実行するとサンプルのレースゲームが起動されました。
とりあえず、動かしてみるところまでできました✨
別のゲームを実行してみる
Readmeに載っていたサンプルは車のレースゲームですが、公式サイトをみると色々なENVIRONMENTS(環境)が用意されています。
上で記載したコードはReadMeにあったコードをまるっとコピーしただけなので、少し変更して別のゲーム(環境)にしました。選んだのはinternet.SlitherIO-v0です。また、example以下にあったrandom-agent.pyのコードを見て操作をランダム?に変更しました。
import argparse import gym import universe # register the universe environments from universe import wrappers env = gym.make('internet.SlitherIO-v0') env.configure(remotes=1) # automatically creates a local docker container env = wrappers.SafeActionSpace(env) observation_n = env.reset() while True: action_n = [env.action_space.sample() for ob in observation_n] observation_n, reward_n, done_n, info = env.step(action_n) env.render()
これも
> python sample2.py
で実行するとゲーム画面が起動します。
さいごに
Universeは画面のピクセルを見て、仮想キーボードとマウスを操作するという特性上、汎用性が高そうな印象を受けました。
現在、公開されている環境はかなり多いので、環境やアクションを変えて色々と試してみると楽しいかもしれません。